<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSS变量和计算函数示例</title>
    <style>
        /* 1. 全局CSS变量 */
        :root {
            /* 主题颜色 */
            --primary-color: #007bff;
            --secondary-color: #6c757d;
            --success-color: #28a745;
            --danger-color: #dc3545;

            /* 间距 */
            --spacing-unit: 8px;
            --content-padding: calc(var(--spacing-unit) * 2);
            --section-margin: calc(var(--spacing-unit) * 4);

            /* 字体 */
            --base-font-size: 16px;
            --heading-scale: 1.2;
            --h1-size: calc(var(--base-font-size) * var(--heading-scale) * 2);
            --h2-size: calc(var(--base-font-size) * var(--heading-scale) * 1.5);

            /* 布局 */
            --container-width: min(90%, 1200px);
            --sidebar-width: clamp(200px, 25%, 300px);
        }

        /* 暗色主题变量 */
        [data-theme="dark"] {
            --primary-color: #4dabf7;
            --secondary-color: #adb5bd;
            --text-color: #f8f9fa;
            --bg-color: #343a40;
        }

        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }

        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
            padding: var(--content-padding);
            font-size: var(--base-font-size);
            transition: background-color 0.3s, color 0.3s;
        }

        body[data-theme="dark"] {
            background-color: var(--bg-color);
            color: var(--text-color);
        }

        .container {
            width: var(--container-width);
            margin: 0 auto;
        }

        /* 2. 响应式布局中的CSS变量 */
        .layout {
            display: flex;
            gap: var(--spacing-unit);
            margin: var(--section-margin) 0;
        }

        .sidebar {
            width: var(--sidebar-width);
            background-color: var(--secondary-color);
            padding: var(--content-padding);
            color: white;
        }

        .main-content {
            flex: 1;
            padding: var(--content-padding);
            background-color: var(--primary-color);
            color: white;
        }

        /* 3. 动态计算 */
        .card {
            --card-padding: calc(var(--spacing-unit) * 2);
            --card-border-radius: calc(var(--spacing-unit) * 1);
            
            padding: var(--card-padding);
            border-radius: var(--card-border-radius);
            margin: var(--spacing-unit) 0;
            background-color: white;
            box-shadow: 0 2px 4px rgba(0,0,0,0.1);
        }

        body[data-theme="dark"] .card {
            background-color: #2b3035;
        }

        /* 4. 按钮组件 */
        .button {
            --button-padding-x: calc(var(--spacing-unit) * 2);
            --button-padding-y: var(--spacing-unit);
            --button-color: var(--primary-color);
            
            padding: var(--button-padding-y) var(--button-padding-x);
            background-color: var(--button-color);
            border: none;
            border-radius: calc(var(--spacing-unit) * 0.5);
            color: white;
            cursor: pointer;
            transition: transform 0.2s, box-shadow 0.2s;
        }

        .button:hover {
            transform: translateY(-2px);
            box-shadow: 0 2px 4px rgba(0,0,0,0.2);
        }

        .button--secondary {
            --button-color: var(--secondary-color);
        }

        .button--success {
            --button-color: var(--success-color);
        }

        .button--danger {
            --button-color: var(--danger-color);
        }

        /* 5. 响应式文字大小 */
        h1 {
            font-size: var(--h1-size);
            margin-bottom: var(--spacing-unit);
        }

        h2 {
            font-size: var(--h2-size);
            margin: var(--section-margin) 0 var(--spacing-unit);
        }

        /* 6. 自定义属性继承 */
        .nested-section {
            --section-color: var(--primary-color);
            --text-color: white;
            
            background-color: var(--section-color);
            color: var(--text-color);
            padding: var(--content-padding);
            margin: var(--spacing-unit) 0;
            border-radius: calc(var(--spacing-unit) * 0.5);
        }

        .nested-section .nested-content {
            --section-color: color-mix(in srgb, var(--section-color) 80%, white);
            background-color: var(--section-color);
            padding: var(--content-padding);
            border-radius: calc(var(--spacing-unit) * 0.5);
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>CSS变量和计算函数示例</h1>
        
        <div class="theme-switcher">
            <button class="button" onclick="toggleTheme()">切换主题</button>
        </div>

        <div class="layout">
            <aside class="sidebar">
                <h2>侧边栏</h2>
                <p>使用CSS变量控制宽度和样式</p>
            </aside>
            
            <main class="main-content">
                <h2>主要内容</h2>
                <p>自适应宽度的主内容区域</p>
            </main>
        </div>

        <section>
            <h2>按钮变体</h2>
            <button class="button">主要按钮</button>
            <button class="button button--secondary">次要按钮</button>
            <button class="button button--success">成功按钮</button>
            <button class="button button--danger">危险按钮</button>
        </section>

        <section>
            <h2>卡片组件</h2>
            <div class="card">
                <h3>使用CSS变量的卡片</h3>
                <p>通过CSS变量控制内边距和圆角</p>
            </div>
        </section>

        <section>
            <h2>嵌套变量</h2>
            <div class="nested-section">
                <p>外层内容</p>
                <div class="nested-content">
                    <p>内层内容（继承和修改颜色）</p>
                </div>
            </div>
        </section>
    </div>

    <script>
        function toggleTheme() {
            const body = document.body;
            const currentTheme = body.getAttribute('data-theme');
            body.setAttribute('data-theme', currentTheme === 'dark' ? 'light' : 'dark');
        }
    </script>
</body>
</html>
